from wxauto.msgs.base import Message
import ai
import db
from wxauto import *
import time

# 对话次数：用于判断首次对话需添加提示词（当前逻辑已修改，保留变量供后续可能使用）
talkNum = 0
# 重复对话暴力判断
message = {}
prompt = ""  # 存储公共提示词，字符串类型


# 读取通用提示词
file_prompt_path = 'prompt.txt'
try:
    with open(file_prompt_path, 'r', encoding='utf-8') as file:
        # 读取所有内容为字符串
        prompt = file.read()
except FileNotFoundError:
    print(f"文件 {file_prompt_path} 未找到，请检查文件路径是否正确！")
except Exception as e:
    print(f"读取文件时发生错误：{e}")

def message_callback(msg: Message, chat_name: str):
    if msg.content == "以下为新消息":
        return
    # 排除自己防止死循环
    if msg.sender == 'self':
        return

    global message, talkNum
    talkNum += 1

    # 测试发现一个消息会被监听两次，加此判断避免重复处理
    if not message or msg.content not in message:
        print(f"\n收到来自 {chat_name} 的消息：{msg.content}")
        message[msg.content] = 2

        try:
            # 获取监听的第一个对话框，增加异常处理
            sub_windows = wx.GetAllSubWindow()
            if not sub_windows:
                print("未找到任何对话窗口")
                return

            chat = sub_windows[0]
        except Exception as e:
            print(f"获取对话窗口失败: {e}")
            return

        # 每次对话都添加公共提示词
        if prompt:  # 只有当提示词存在时才拼接
            allprompt = f"{msg.content}\n{prompt}"
        else:
            allprompt = msg.content  # 如果没有提示词，直接使用消息内容

        try:
            # 调用AI进行消息回复
            response = ai.chat(msg.info["chat_name"], allprompt)
            chat.SendMsg(response)
        except Exception as e:
            print(f"发送消息失败: {e}")
    else:
        message = {}


wx = WeChat()
listen_list = []

# 读取好友列表
file_path = 'names.txt'
try:
    with open(file_path, 'r', encoding='utf-8') as file:
        names = file.readlines()
        listen_list = [name.strip() for name in names]
except FileNotFoundError:
    print(f"文件 {file_path} 未找到，请检查文件路径是否正确！")
except Exception as e:
    print(f"读取文件时发生错误：{e}")

for i in listen_list:
    print(f"开始监听好友 {i} 的消息...")
    wx.AddListenChat(i, message_callback)
    ai.add_user(i)

wait = 1  # 设置间隔时间

# 创建数据库
db.create_db()

while True:
    time.sleep(wait)
